package com.sais.manage.boot.platform.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.manage.boot.platform.dto.MenuDTO;
import com.sais.manage.boot.platform.dto.MenuSaveDTO;
import com.sais.manage.boot.platform.dto.MenuSearchDTO;
import com.sais.manage.boot.platform.dto.MenuTreeDTO;
import com.sais.manage.boot.platform.entity.Menu;

import java.util.List;

/**
 * 宿舍管理系统-菜单表 服务类接口
 *
 * @author zhang
 * @date 2019/11/29
 **/
public interface IMenuService {


    /**
     * 保存 菜单
     *
     * @param menuSaveDTO
     * @return
     */
    boolean saveMenu(MenuSaveDTO menuSaveDTO);

    /**
     * 创建 菜单
     *
     * @param menu
     * @return
     */
    boolean createMenu(MenuSaveDTO menu);

    /**
     * 更新菜单信息
     *
     * @param menu
     * @return
     */
    boolean updateMenu(MenuSaveDTO menu);


    /**
     * 根据菜单id删除
     *
     * @param menuId
     * @return
     */
    boolean deleteMenu(String menuId);


    /**
     * 根据 菜单id 查询
     *
     * @param menuId
     * @return
     */
    MenuDTO selectMenu(String menuId);


    /**
     * 根据 父id 查询所有子菜单
     *
     * @param parentId
     * @return
     */
    List<MenuTreeDTO> listMenuTree(String parentId);

    /**
     * 模糊分页 查询
     *
     * @param searchDTO
     * @param current
     * @param size
     * @return
     */
    Page<MenuDTO> listMenu(MenuSearchDTO searchDTO, Integer current, Integer size);

    /**
     * 根据 用户id 查询菜单列表
     *
     * @param userId
     * @return
     */
    List<MenuDTO> listSystemByUserId(String userId);


    /**
     * 根据用户id 查询菜单树
     *
     * @param systemId
     * @param ukId
     * @return
     */
    List<MenuTreeDTO> listMenuTreeByUser(String systemId, String ukId);

    /**
     * 菜单 绑定 权限
     *
     * @param menuId
     * @param permissionIds
     * @return
     */
    boolean bindMenuPermission(String menuId, List<String> permissionIds);


    /**
     * 菜单 解绑 权限
     *
     * @param menuId
     * @return
     */
    boolean unBindMenuPermission(String menuId);

    /**
     * 查询是否存在子菜单
     *
     * @param parentId
     * @return
     */
    boolean hasChildren(String parentId);

    /**
     * 检查菜单类型
     *
     * @param menu
     * @return
     */
    boolean checkMenuType(Menu menu);

    /**
     * 查询 当前用户
     *
     * @param ukId
     * @return
     */
    List<MenuTreeDTO> listMenuByUser(String ukId);

}
